package net.maylander.bfcpublog.bfwb.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import net.maylander.bfcpublog.bfwb.services.BrainfuckLanguageGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalBrainfuckLanguageParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'bfprogram'", "'{'", "'symbols:'", "'macros:'", "'}'", "'symbol'", "'='", "'#region'", "'macro'", "'('", "','", "')'", "'param'", "'*'", "'['", "']'", "'+'", "'-'", "'<'", "'>'", "'.'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=6;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalBrainfuckLanguageParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g"; }



     	private BrainfuckLanguageGrammarAccess grammarAccess;
     	
        public InternalBrainfuckLanguageParser(TokenStream input, IAstFactory factory, BrainfuckLanguageGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "BrainfuckProgram";	
       	}
       	
       	@Override
       	protected BrainfuckLanguageGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleBrainfuckProgram
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:78:1: entryRuleBrainfuckProgram returns [EObject current=null] : iv_ruleBrainfuckProgram= ruleBrainfuckProgram EOF ;
    public final EObject entryRuleBrainfuckProgram() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBrainfuckProgram = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:79:2: (iv_ruleBrainfuckProgram= ruleBrainfuckProgram EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:80:2: iv_ruleBrainfuckProgram= ruleBrainfuckProgram EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBrainfuckProgramRule(), currentNode); 
            pushFollow(FOLLOW_ruleBrainfuckProgram_in_entryRuleBrainfuckProgram75);
            iv_ruleBrainfuckProgram=ruleBrainfuckProgram();
            _fsp--;

             current =iv_ruleBrainfuckProgram; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBrainfuckProgram85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBrainfuckProgram


    // $ANTLR start ruleBrainfuckProgram
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:87:1: ruleBrainfuckProgram returns [EObject current=null] : ( 'bfprogram' ( (lv_name_1_0= RULE_ID ) ) '{' ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )? ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )? ( (lv_stmts_7_0= ruleAbstractStmt ) )* '}' ) ;
    public final EObject ruleBrainfuckProgram() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_symbols_4_0 = null;

        EObject lv_macros_6_0 = null;

        EObject lv_stmts_7_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:92:6: ( ( 'bfprogram' ( (lv_name_1_0= RULE_ID ) ) '{' ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )? ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )? ( (lv_stmts_7_0= ruleAbstractStmt ) )* '}' ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:93:1: ( 'bfprogram' ( (lv_name_1_0= RULE_ID ) ) '{' ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )? ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )? ( (lv_stmts_7_0= ruleAbstractStmt ) )* '}' )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:93:1: ( 'bfprogram' ( (lv_name_1_0= RULE_ID ) ) '{' ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )? ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )? ( (lv_stmts_7_0= ruleAbstractStmt ) )* '}' )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:93:3: 'bfprogram' ( (lv_name_1_0= RULE_ID ) ) '{' ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )? ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )? ( (lv_stmts_7_0= ruleAbstractStmt ) )* '}'
            {
            match(input,11,FOLLOW_11_in_ruleBrainfuckProgram120); 

                    createLeafNode(grammarAccess.getBrainfuckProgramAccess().getBfprogramKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:97:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:98:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:98:1: (lv_name_1_0= RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:99:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleBrainfuckProgram137); 

            			createLeafNode(grammarAccess.getBrainfuckProgramAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getBrainfuckProgramRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleBrainfuckProgram152); 

                    createLeafNode(grammarAccess.getBrainfuckProgramAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:125:1: ( 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )* )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==13) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:125:3: 'symbols:' ( (lv_symbols_4_0= ruleSymbolDef ) )*
                    {
                    match(input,13,FOLLOW_13_in_ruleBrainfuckProgram163); 

                            createLeafNode(grammarAccess.getBrainfuckProgramAccess().getSymbolsKeyword_3_0(), null); 
                        
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:129:1: ( (lv_symbols_4_0= ruleSymbolDef ) )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

                        if ( (LA1_0==16) ) {
                            alt1=1;
                        }


                        switch (alt1) {
                    	case 1 :
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:130:1: (lv_symbols_4_0= ruleSymbolDef )
                    	    {
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:130:1: (lv_symbols_4_0= ruleSymbolDef )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:131:3: lv_symbols_4_0= ruleSymbolDef
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getBrainfuckProgramAccess().getSymbolsSymbolDefParserRuleCall_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleSymbolDef_in_ruleBrainfuckProgram184);
                    	    lv_symbols_4_0=ruleSymbolDef();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getBrainfuckProgramRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"symbols",
                    	    	        		lv_symbols_4_0, 
                    	    	        		"SymbolDef", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop1;
                        }
                    } while (true);


                    }
                    break;

            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:153:5: ( 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )* )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==14) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:153:7: 'macros:' ( (lv_macros_6_0= ruleAbstractMacroDef ) )*
                    {
                    match(input,14,FOLLOW_14_in_ruleBrainfuckProgram198); 

                            createLeafNode(grammarAccess.getBrainfuckProgramAccess().getMacrosKeyword_4_0(), null); 
                        
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:157:1: ( (lv_macros_6_0= ruleAbstractMacroDef ) )*
                    loop3:
                    do {
                        int alt3=2;
                        int LA3_0 = input.LA(1);

                        if ( ((LA3_0>=18 && LA3_0<=19)) ) {
                            alt3=1;
                        }


                        switch (alt3) {
                    	case 1 :
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:158:1: (lv_macros_6_0= ruleAbstractMacroDef )
                    	    {
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:158:1: (lv_macros_6_0= ruleAbstractMacroDef )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:159:3: lv_macros_6_0= ruleAbstractMacroDef
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getBrainfuckProgramAccess().getMacrosAbstractMacroDefParserRuleCall_4_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleAbstractMacroDef_in_ruleBrainfuckProgram219);
                    	    lv_macros_6_0=ruleAbstractMacroDef();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getBrainfuckProgramRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"macros",
                    	    	        		lv_macros_6_0, 
                    	    	        		"AbstractMacroDef", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop3;
                        }
                    } while (true);


                    }
                    break;

            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:181:5: ( (lv_stmts_7_0= ruleAbstractStmt ) )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==RULE_ID||LA5_0==12||LA5_0==21||LA5_0==25||(LA5_0>=27 && LA5_0<=31)) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:182:1: (lv_stmts_7_0= ruleAbstractStmt )
            	    {
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:182:1: (lv_stmts_7_0= ruleAbstractStmt )
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:183:3: lv_stmts_7_0= ruleAbstractStmt
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getBrainfuckProgramAccess().getStmtsAbstractStmtParserRuleCall_5_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractStmt_in_ruleBrainfuckProgram243);
            	    lv_stmts_7_0=ruleAbstractStmt();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getBrainfuckProgramRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"stmts",
            	    	        		lv_stmts_7_0, 
            	    	        		"AbstractStmt", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleBrainfuckProgram254); 

                    createLeafNode(grammarAccess.getBrainfuckProgramAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBrainfuckProgram


    // $ANTLR start entryRuleSymbolDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:217:1: entryRuleSymbolDef returns [EObject current=null] : iv_ruleSymbolDef= ruleSymbolDef EOF ;
    public final EObject entryRuleSymbolDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymbolDef = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:218:2: (iv_ruleSymbolDef= ruleSymbolDef EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:219:2: iv_ruleSymbolDef= ruleSymbolDef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSymbolDefRule(), currentNode); 
            pushFollow(FOLLOW_ruleSymbolDef_in_entryRuleSymbolDef290);
            iv_ruleSymbolDef=ruleSymbolDef();
            _fsp--;

             current =iv_ruleSymbolDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymbolDef300); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSymbolDef


    // $ANTLR start ruleSymbolDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:226:1: ruleSymbolDef returns [EObject current=null] : ( 'symbol' ( (lv_name_1_0= RULE_ID ) ) '=' ( (lv_value_3_0= ruleSignedInt ) ) ) ;
    public final EObject ruleSymbolDef() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_value_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:231:6: ( ( 'symbol' ( (lv_name_1_0= RULE_ID ) ) '=' ( (lv_value_3_0= ruleSignedInt ) ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:232:1: ( 'symbol' ( (lv_name_1_0= RULE_ID ) ) '=' ( (lv_value_3_0= ruleSignedInt ) ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:232:1: ( 'symbol' ( (lv_name_1_0= RULE_ID ) ) '=' ( (lv_value_3_0= ruleSignedInt ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:232:3: 'symbol' ( (lv_name_1_0= RULE_ID ) ) '=' ( (lv_value_3_0= ruleSignedInt ) )
            {
            match(input,16,FOLLOW_16_in_ruleSymbolDef335); 

                    createLeafNode(grammarAccess.getSymbolDefAccess().getSymbolKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:236:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:237:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:237:1: (lv_name_1_0= RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:238:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSymbolDef352); 

            			createLeafNode(grammarAccess.getSymbolDefAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSymbolDefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,17,FOLLOW_17_in_ruleSymbolDef367); 

                    createLeafNode(grammarAccess.getSymbolDefAccess().getEqualsSignKeyword_2(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:264:1: ( (lv_value_3_0= ruleSignedInt ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:265:1: (lv_value_3_0= ruleSignedInt )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:265:1: (lv_value_3_0= ruleSignedInt )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:266:3: lv_value_3_0= ruleSignedInt
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getSymbolDefAccess().getValueSignedIntParserRuleCall_3_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleSignedInt_in_ruleSymbolDef388);
            lv_value_3_0=ruleSignedInt();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSymbolDefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"value",
            	        		lv_value_3_0, 
            	        		"SignedInt", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSymbolDef


    // $ANTLR start entryRuleAbstractMacroDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:296:1: entryRuleAbstractMacroDef returns [EObject current=null] : iv_ruleAbstractMacroDef= ruleAbstractMacroDef EOF ;
    public final EObject entryRuleAbstractMacroDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractMacroDef = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:297:2: (iv_ruleAbstractMacroDef= ruleAbstractMacroDef EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:298:2: iv_ruleAbstractMacroDef= ruleAbstractMacroDef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAbstractMacroDefRule(), currentNode); 
            pushFollow(FOLLOW_ruleAbstractMacroDef_in_entryRuleAbstractMacroDef424);
            iv_ruleAbstractMacroDef=ruleAbstractMacroDef();
            _fsp--;

             current =iv_ruleAbstractMacroDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractMacroDef434); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAbstractMacroDef


    // $ANTLR start ruleAbstractMacroDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:305:1: ruleAbstractMacroDef returns [EObject current=null] : (this_MacroDef_0= ruleMacroDef | this_Region_1= ruleRegion ) ;
    public final EObject ruleAbstractMacroDef() throws RecognitionException {
        EObject current = null;

        EObject this_MacroDef_0 = null;

        EObject this_Region_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:310:6: ( (this_MacroDef_0= ruleMacroDef | this_Region_1= ruleRegion ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:311:1: (this_MacroDef_0= ruleMacroDef | this_Region_1= ruleRegion )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:311:1: (this_MacroDef_0= ruleMacroDef | this_Region_1= ruleRegion )
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==19) ) {
                alt6=1;
            }
            else if ( (LA6_0==18) ) {
                alt6=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("311:1: (this_MacroDef_0= ruleMacroDef | this_Region_1= ruleRegion )", 6, 0, input);

                throw nvae;
            }
            switch (alt6) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:312:5: this_MacroDef_0= ruleMacroDef
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractMacroDefAccess().getMacroDefParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleMacroDef_in_ruleAbstractMacroDef481);
                    this_MacroDef_0=ruleMacroDef();
                    _fsp--;

                     
                            current = this_MacroDef_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:322:5: this_Region_1= ruleRegion
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractMacroDefAccess().getRegionParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleRegion_in_ruleAbstractMacroDef508);
                    this_Region_1=ruleRegion();
                    _fsp--;

                     
                            current = this_Region_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAbstractMacroDef


    // $ANTLR start entryRuleRegion
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:338:1: entryRuleRegion returns [EObject current=null] : iv_ruleRegion= ruleRegion EOF ;
    public final EObject entryRuleRegion() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRegion = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:339:2: (iv_ruleRegion= ruleRegion EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:340:2: iv_ruleRegion= ruleRegion EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRegionRule(), currentNode); 
            pushFollow(FOLLOW_ruleRegion_in_entryRuleRegion543);
            iv_ruleRegion=ruleRegion();
            _fsp--;

             current =iv_ruleRegion; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRegion553); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRegion


    // $ANTLR start ruleRegion
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:347:1: ruleRegion returns [EObject current=null] : ( '#region' ( (lv_name_1_0= RULE_ID ) ) '{' ( (lv_elements_3_0= ruleAbstractMacroDef ) )* '}' ) ;
    public final EObject ruleRegion() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_elements_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:352:6: ( ( '#region' ( (lv_name_1_0= RULE_ID ) ) '{' ( (lv_elements_3_0= ruleAbstractMacroDef ) )* '}' ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:353:1: ( '#region' ( (lv_name_1_0= RULE_ID ) ) '{' ( (lv_elements_3_0= ruleAbstractMacroDef ) )* '}' )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:353:1: ( '#region' ( (lv_name_1_0= RULE_ID ) ) '{' ( (lv_elements_3_0= ruleAbstractMacroDef ) )* '}' )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:353:3: '#region' ( (lv_name_1_0= RULE_ID ) ) '{' ( (lv_elements_3_0= ruleAbstractMacroDef ) )* '}'
            {
            match(input,18,FOLLOW_18_in_ruleRegion588); 

                    createLeafNode(grammarAccess.getRegionAccess().getRegionKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:357:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:358:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:358:1: (lv_name_1_0= RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:359:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRegion605); 

            			createLeafNode(grammarAccess.getRegionAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getRegionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleRegion620); 

                    createLeafNode(grammarAccess.getRegionAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:385:1: ( (lv_elements_3_0= ruleAbstractMacroDef ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( ((LA7_0>=18 && LA7_0<=19)) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:386:1: (lv_elements_3_0= ruleAbstractMacroDef )
            	    {
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:386:1: (lv_elements_3_0= ruleAbstractMacroDef )
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:387:3: lv_elements_3_0= ruleAbstractMacroDef
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getRegionAccess().getElementsAbstractMacroDefParserRuleCall_3_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractMacroDef_in_ruleRegion641);
            	    lv_elements_3_0=ruleAbstractMacroDef();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getRegionRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"elements",
            	    	        		lv_elements_3_0, 
            	    	        		"AbstractMacroDef", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleRegion652); 

                    createLeafNode(grammarAccess.getRegionAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRegion


    // $ANTLR start entryRuleMacroDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:421:1: entryRuleMacroDef returns [EObject current=null] : iv_ruleMacroDef= ruleMacroDef EOF ;
    public final EObject entryRuleMacroDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMacroDef = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:422:2: (iv_ruleMacroDef= ruleMacroDef EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:423:2: iv_ruleMacroDef= ruleMacroDef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMacroDefRule(), currentNode); 
            pushFollow(FOLLOW_ruleMacroDef_in_entryRuleMacroDef688);
            iv_ruleMacroDef=ruleMacroDef();
            _fsp--;

             current =iv_ruleMacroDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMacroDef698); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMacroDef


    // $ANTLR start ruleMacroDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:430:1: ruleMacroDef returns [EObject current=null] : ( 'macro' ( (lv_name_1_0= RULE_ID ) ) ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )? '{' ( (lv_stmts_8_0= ruleAbstractStmt ) )* '}' ) ;
    public final EObject ruleMacroDef() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_params_3_0 = null;

        EObject lv_params_5_0 = null;

        EObject lv_stmts_8_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:435:6: ( ( 'macro' ( (lv_name_1_0= RULE_ID ) ) ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )? '{' ( (lv_stmts_8_0= ruleAbstractStmt ) )* '}' ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:436:1: ( 'macro' ( (lv_name_1_0= RULE_ID ) ) ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )? '{' ( (lv_stmts_8_0= ruleAbstractStmt ) )* '}' )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:436:1: ( 'macro' ( (lv_name_1_0= RULE_ID ) ) ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )? '{' ( (lv_stmts_8_0= ruleAbstractStmt ) )* '}' )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:436:3: 'macro' ( (lv_name_1_0= RULE_ID ) ) ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )? '{' ( (lv_stmts_8_0= ruleAbstractStmt ) )* '}'
            {
            match(input,19,FOLLOW_19_in_ruleMacroDef733); 

                    createLeafNode(grammarAccess.getMacroDefAccess().getMacroKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:440:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:441:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:441:1: (lv_name_1_0= RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:442:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMacroDef750); 

            			createLeafNode(grammarAccess.getMacroDefAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getMacroDefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:464:2: ( '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')' )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==20) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:464:4: '(' ( (lv_params_3_0= ruleParamDef ) ) ( ',' ( (lv_params_5_0= ruleParamDef ) ) )* ')'
                    {
                    match(input,20,FOLLOW_20_in_ruleMacroDef766); 

                            createLeafNode(grammarAccess.getMacroDefAccess().getLeftParenthesisKeyword_2_0(), null); 
                        
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:468:1: ( (lv_params_3_0= ruleParamDef ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:469:1: (lv_params_3_0= ruleParamDef )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:469:1: (lv_params_3_0= ruleParamDef )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:470:3: lv_params_3_0= ruleParamDef
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getMacroDefAccess().getParamsParamDefParserRuleCall_2_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleParamDef_in_ruleMacroDef787);
                    lv_params_3_0=ruleParamDef();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getMacroDefRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"params",
                    	        		lv_params_3_0, 
                    	        		"ParamDef", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:492:2: ( ',' ( (lv_params_5_0= ruleParamDef ) ) )*
                    loop8:
                    do {
                        int alt8=2;
                        int LA8_0 = input.LA(1);

                        if ( (LA8_0==21) ) {
                            alt8=1;
                        }


                        switch (alt8) {
                    	case 1 :
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:492:4: ',' ( (lv_params_5_0= ruleParamDef ) )
                    	    {
                    	    match(input,21,FOLLOW_21_in_ruleMacroDef798); 

                    	            createLeafNode(grammarAccess.getMacroDefAccess().getCommaKeyword_2_2_0(), null); 
                    	        
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:496:1: ( (lv_params_5_0= ruleParamDef ) )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:497:1: (lv_params_5_0= ruleParamDef )
                    	    {
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:497:1: (lv_params_5_0= ruleParamDef )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:498:3: lv_params_5_0= ruleParamDef
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getMacroDefAccess().getParamsParamDefParserRuleCall_2_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleParamDef_in_ruleMacroDef819);
                    	    lv_params_5_0=ruleParamDef();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getMacroDefRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"params",
                    	    	        		lv_params_5_0, 
                    	    	        		"ParamDef", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop8;
                        }
                    } while (true);

                    match(input,22,FOLLOW_22_in_ruleMacroDef831); 

                            createLeafNode(grammarAccess.getMacroDefAccess().getRightParenthesisKeyword_2_3(), null); 
                        

                    }
                    break;

            }

            match(input,12,FOLLOW_12_in_ruleMacroDef843); 

                    createLeafNode(grammarAccess.getMacroDefAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:528:1: ( (lv_stmts_8_0= ruleAbstractStmt ) )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==RULE_ID||LA10_0==12||LA10_0==21||LA10_0==25||(LA10_0>=27 && LA10_0<=31)) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:529:1: (lv_stmts_8_0= ruleAbstractStmt )
            	    {
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:529:1: (lv_stmts_8_0= ruleAbstractStmt )
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:530:3: lv_stmts_8_0= ruleAbstractStmt
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getMacroDefAccess().getStmtsAbstractStmtParserRuleCall_4_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractStmt_in_ruleMacroDef864);
            	    lv_stmts_8_0=ruleAbstractStmt();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getMacroDefRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"stmts",
            	    	        		lv_stmts_8_0, 
            	    	        		"AbstractStmt", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleMacroDef875); 

                    createLeafNode(grammarAccess.getMacroDefAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMacroDef


    // $ANTLR start entryRuleParamDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:564:1: entryRuleParamDef returns [EObject current=null] : iv_ruleParamDef= ruleParamDef EOF ;
    public final EObject entryRuleParamDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParamDef = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:565:2: (iv_ruleParamDef= ruleParamDef EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:566:2: iv_ruleParamDef= ruleParamDef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getParamDefRule(), currentNode); 
            pushFollow(FOLLOW_ruleParamDef_in_entryRuleParamDef911);
            iv_ruleParamDef=ruleParamDef();
            _fsp--;

             current =iv_ruleParamDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParamDef921); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleParamDef


    // $ANTLR start ruleParamDef
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:573:1: ruleParamDef returns [EObject current=null] : ( 'param' ( (lv_name_1_0= RULE_ID ) ) ) ;
    public final EObject ruleParamDef() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:578:6: ( ( 'param' ( (lv_name_1_0= RULE_ID ) ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:579:1: ( 'param' ( (lv_name_1_0= RULE_ID ) ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:579:1: ( 'param' ( (lv_name_1_0= RULE_ID ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:579:3: 'param' ( (lv_name_1_0= RULE_ID ) )
            {
            match(input,23,FOLLOW_23_in_ruleParamDef956); 

                    createLeafNode(grammarAccess.getParamDefAccess().getParamKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:583:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:584:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:584:1: (lv_name_1_0= RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:585:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParamDef973); 

            			createLeafNode(grammarAccess.getParamDefAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParamDefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleParamDef


    // $ANTLR start entryRuleAbstractStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:615:1: entryRuleAbstractStmt returns [EObject current=null] : iv_ruleAbstractStmt= ruleAbstractStmt EOF ;
    public final EObject entryRuleAbstractStmt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractStmt = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:616:2: (iv_ruleAbstractStmt= ruleAbstractStmt EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:617:2: iv_ruleAbstractStmt= ruleAbstractStmt EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAbstractStmtRule(), currentNode); 
            pushFollow(FOLLOW_ruleAbstractStmt_in_entryRuleAbstractStmt1014);
            iv_ruleAbstractStmt=ruleAbstractStmt();
            _fsp--;

             current =iv_ruleAbstractStmt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractStmt1024); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAbstractStmt


    // $ANTLR start ruleAbstractStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:624:1: ruleAbstractStmt returns [EObject current=null] : ( (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt ) ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )? ) ;
    public final EObject ruleAbstractStmt() throws RecognitionException {
        EObject current = null;

        EObject this_SimpleStmt_0 = null;

        EObject this_LoopStmt_1 = null;

        EObject this_MacroCall_2 = null;

        EObject this_BlockStmt_3 = null;

        EObject lv_repeat_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:629:6: ( ( (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt ) ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )? ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:630:1: ( (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt ) ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )? )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:630:1: ( (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt ) ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )? )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:630:2: (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt ) ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )?
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:630:2: (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt )
            int alt11=4;
            switch ( input.LA(1) ) {
            case 21:
            case 27:
            case 28:
            case 29:
            case 30:
            case 31:
                {
                alt11=1;
                }
                break;
            case 25:
                {
                alt11=2;
                }
                break;
            case RULE_ID:
                {
                alt11=3;
                }
                break;
            case 12:
                {
                alt11=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("630:2: (this_SimpleStmt_0= ruleSimpleStmt | this_LoopStmt_1= ruleLoopStmt | this_MacroCall_2= ruleMacroCall | this_BlockStmt_3= ruleBlockStmt )", 11, 0, input);

                throw nvae;
            }

            switch (alt11) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:631:5: this_SimpleStmt_0= ruleSimpleStmt
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractStmtAccess().getSimpleStmtParserRuleCall_0_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleSimpleStmt_in_ruleAbstractStmt1072);
                    this_SimpleStmt_0=ruleSimpleStmt();
                    _fsp--;

                     
                            current = this_SimpleStmt_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:641:5: this_LoopStmt_1= ruleLoopStmt
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractStmtAccess().getLoopStmtParserRuleCall_0_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleLoopStmt_in_ruleAbstractStmt1099);
                    this_LoopStmt_1=ruleLoopStmt();
                    _fsp--;

                     
                            current = this_LoopStmt_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:651:5: this_MacroCall_2= ruleMacroCall
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractStmtAccess().getMacroCallParserRuleCall_0_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleMacroCall_in_ruleAbstractStmt1126);
                    this_MacroCall_2=ruleMacroCall();
                    _fsp--;

                     
                            current = this_MacroCall_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 4 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:661:5: this_BlockStmt_3= ruleBlockStmt
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractStmtAccess().getBlockStmtParserRuleCall_0_3(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleBlockStmt_in_ruleAbstractStmt1153);
                    this_BlockStmt_3=ruleBlockStmt();
                    _fsp--;

                     
                            current = this_BlockStmt_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:669:2: ( '*' ( (lv_repeat_5_0= ruleBfValue ) ) )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==24) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:669:4: '*' ( (lv_repeat_5_0= ruleBfValue ) )
                    {
                    match(input,24,FOLLOW_24_in_ruleAbstractStmt1164); 

                            createLeafNode(grammarAccess.getAbstractStmtAccess().getAsteriskKeyword_1_0(), null); 
                        
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:673:1: ( (lv_repeat_5_0= ruleBfValue ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:674:1: (lv_repeat_5_0= ruleBfValue )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:674:1: (lv_repeat_5_0= ruleBfValue )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:675:3: lv_repeat_5_0= ruleBfValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getAbstractStmtAccess().getRepeatBfValueParserRuleCall_1_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleBfValue_in_ruleAbstractStmt1185);
                    lv_repeat_5_0=ruleBfValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getAbstractStmtRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"repeat",
                    	        		lv_repeat_5_0, 
                    	        		"BfValue", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAbstractStmt


    // $ANTLR start entryRuleSimpleStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:705:1: entryRuleSimpleStmt returns [EObject current=null] : iv_ruleSimpleStmt= ruleSimpleStmt EOF ;
    public final EObject entryRuleSimpleStmt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSimpleStmt = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:706:2: (iv_ruleSimpleStmt= ruleSimpleStmt EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:707:2: iv_ruleSimpleStmt= ruleSimpleStmt EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSimpleStmtRule(), currentNode); 
            pushFollow(FOLLOW_ruleSimpleStmt_in_entryRuleSimpleStmt1223);
            iv_ruleSimpleStmt=ruleSimpleStmt();
            _fsp--;

             current =iv_ruleSimpleStmt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSimpleStmt1233); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSimpleStmt


    // $ANTLR start ruleSimpleStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:714:1: ruleSimpleStmt returns [EObject current=null] : ( (lv_kind_0_0= ruleSimpleStmtKind ) ) ;
    public final EObject ruleSimpleStmt() throws RecognitionException {
        EObject current = null;

        Enumerator lv_kind_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:719:6: ( ( (lv_kind_0_0= ruleSimpleStmtKind ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:720:1: ( (lv_kind_0_0= ruleSimpleStmtKind ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:720:1: ( (lv_kind_0_0= ruleSimpleStmtKind ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:721:1: (lv_kind_0_0= ruleSimpleStmtKind )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:721:1: (lv_kind_0_0= ruleSimpleStmtKind )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:722:3: lv_kind_0_0= ruleSimpleStmtKind
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getSimpleStmtAccess().getKindSimpleStmtKindEnumRuleCall_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleSimpleStmtKind_in_ruleSimpleStmt1278);
            lv_kind_0_0=ruleSimpleStmtKind();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSimpleStmtRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"kind",
            	        		lv_kind_0_0, 
            	        		"SimpleStmtKind", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSimpleStmt


    // $ANTLR start entryRuleLoopStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:752:1: entryRuleLoopStmt returns [EObject current=null] : iv_ruleLoopStmt= ruleLoopStmt EOF ;
    public final EObject entryRuleLoopStmt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLoopStmt = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:753:2: (iv_ruleLoopStmt= ruleLoopStmt EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:754:2: iv_ruleLoopStmt= ruleLoopStmt EOF
            {
             currentNode = createCompositeNode(grammarAccess.getLoopStmtRule(), currentNode); 
            pushFollow(FOLLOW_ruleLoopStmt_in_entryRuleLoopStmt1313);
            iv_ruleLoopStmt=ruleLoopStmt();
            _fsp--;

             current =iv_ruleLoopStmt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleLoopStmt1323); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleLoopStmt


    // $ANTLR start ruleLoopStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:761:1: ruleLoopStmt returns [EObject current=null] : ( '[' () ( (lv_stmts_2_0= ruleAbstractStmt ) )* ']' ) ;
    public final EObject ruleLoopStmt() throws RecognitionException {
        EObject current = null;

        EObject lv_stmts_2_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:766:6: ( ( '[' () ( (lv_stmts_2_0= ruleAbstractStmt ) )* ']' ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:767:1: ( '[' () ( (lv_stmts_2_0= ruleAbstractStmt ) )* ']' )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:767:1: ( '[' () ( (lv_stmts_2_0= ruleAbstractStmt ) )* ']' )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:767:3: '[' () ( (lv_stmts_2_0= ruleAbstractStmt ) )* ']'
            {
            match(input,25,FOLLOW_25_in_ruleLoopStmt1358); 

                    createLeafNode(grammarAccess.getLoopStmtAccess().getLeftSquareBracketKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:771:1: ()
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:772:5: 
            {
             
                    temp=factory.create(grammarAccess.getLoopStmtAccess().getLoopStmtAction_1().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getLoopStmtAccess().getLoopStmtAction_1(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:782:2: ( (lv_stmts_2_0= ruleAbstractStmt ) )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==RULE_ID||LA13_0==12||LA13_0==21||LA13_0==25||(LA13_0>=27 && LA13_0<=31)) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:783:1: (lv_stmts_2_0= ruleAbstractStmt )
            	    {
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:783:1: (lv_stmts_2_0= ruleAbstractStmt )
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:784:3: lv_stmts_2_0= ruleAbstractStmt
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getLoopStmtAccess().getStmtsAbstractStmtParserRuleCall_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractStmt_in_ruleLoopStmt1388);
            	    lv_stmts_2_0=ruleAbstractStmt();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getLoopStmtRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"stmts",
            	    	        		lv_stmts_2_0, 
            	    	        		"AbstractStmt", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);

            match(input,26,FOLLOW_26_in_ruleLoopStmt1399); 

                    createLeafNode(grammarAccess.getLoopStmtAccess().getRightSquareBracketKeyword_3(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleLoopStmt


    // $ANTLR start entryRuleMacroCall
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:818:1: entryRuleMacroCall returns [EObject current=null] : iv_ruleMacroCall= ruleMacroCall EOF ;
    public final EObject entryRuleMacroCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMacroCall = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:819:2: (iv_ruleMacroCall= ruleMacroCall EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:820:2: iv_ruleMacroCall= ruleMacroCall EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMacroCallRule(), currentNode); 
            pushFollow(FOLLOW_ruleMacroCall_in_entryRuleMacroCall1435);
            iv_ruleMacroCall=ruleMacroCall();
            _fsp--;

             current =iv_ruleMacroCall; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMacroCall1445); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMacroCall


    // $ANTLR start ruleMacroCall
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:827:1: ruleMacroCall returns [EObject current=null] : ( ( ( RULE_ID ) ) ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )? ) ;
    public final EObject ruleMacroCall() throws RecognitionException {
        EObject current = null;

        EObject lv_actuals_2_0 = null;

        EObject lv_actuals_4_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:832:6: ( ( ( ( RULE_ID ) ) ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )? ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:833:1: ( ( ( RULE_ID ) ) ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )? )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:833:1: ( ( ( RULE_ID ) ) ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )? )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:833:2: ( ( RULE_ID ) ) ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )?
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:833:2: ( ( RULE_ID ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:834:1: ( RULE_ID )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:834:1: ( RULE_ID )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:835:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getMacroCallRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMacroCall1488); 

            		createLeafNode(grammarAccess.getMacroCallAccess().getMacroMacroDefCrossReference_0_0(), "macro"); 
            	

            }


            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:847:2: ( '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')' )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==20) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:847:4: '(' ( (lv_actuals_2_0= ruleBfValue ) ) ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )* ')'
                    {
                    match(input,20,FOLLOW_20_in_ruleMacroCall1499); 

                            createLeafNode(grammarAccess.getMacroCallAccess().getLeftParenthesisKeyword_1_0(), null); 
                        
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:851:1: ( (lv_actuals_2_0= ruleBfValue ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:852:1: (lv_actuals_2_0= ruleBfValue )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:852:1: (lv_actuals_2_0= ruleBfValue )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:853:3: lv_actuals_2_0= ruleBfValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getMacroCallAccess().getActualsBfValueParserRuleCall_1_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleBfValue_in_ruleMacroCall1520);
                    lv_actuals_2_0=ruleBfValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getMacroCallRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"actuals",
                    	        		lv_actuals_2_0, 
                    	        		"BfValue", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:875:2: ( ',' ( (lv_actuals_4_0= ruleBfValue ) ) )*
                    loop14:
                    do {
                        int alt14=2;
                        int LA14_0 = input.LA(1);

                        if ( (LA14_0==21) ) {
                            alt14=1;
                        }


                        switch (alt14) {
                    	case 1 :
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:875:4: ',' ( (lv_actuals_4_0= ruleBfValue ) )
                    	    {
                    	    match(input,21,FOLLOW_21_in_ruleMacroCall1531); 

                    	            createLeafNode(grammarAccess.getMacroCallAccess().getCommaKeyword_1_2_0(), null); 
                    	        
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:879:1: ( (lv_actuals_4_0= ruleBfValue ) )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:880:1: (lv_actuals_4_0= ruleBfValue )
                    	    {
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:880:1: (lv_actuals_4_0= ruleBfValue )
                    	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:881:3: lv_actuals_4_0= ruleBfValue
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getMacroCallAccess().getActualsBfValueParserRuleCall_1_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleBfValue_in_ruleMacroCall1552);
                    	    lv_actuals_4_0=ruleBfValue();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getMacroCallRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"actuals",
                    	    	        		lv_actuals_4_0, 
                    	    	        		"BfValue", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop14;
                        }
                    } while (true);

                    match(input,22,FOLLOW_22_in_ruleMacroCall1564); 

                            createLeafNode(grammarAccess.getMacroCallAccess().getRightParenthesisKeyword_1_3(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMacroCall


    // $ANTLR start entryRuleBfValue
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:915:1: entryRuleBfValue returns [EObject current=null] : iv_ruleBfValue= ruleBfValue EOF ;
    public final EObject entryRuleBfValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBfValue = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:916:2: (iv_ruleBfValue= ruleBfValue EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:917:2: iv_ruleBfValue= ruleBfValue EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBfValueRule(), currentNode); 
            pushFollow(FOLLOW_ruleBfValue_in_entryRuleBfValue1602);
            iv_ruleBfValue=ruleBfValue();
            _fsp--;

             current =iv_ruleBfValue; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBfValue1612); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBfValue


    // $ANTLR start ruleBfValue
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:924:1: ruleBfValue returns [EObject current=null] : ( ( (lv_val_0_0= ruleSignedInt ) ) | ( ( RULE_ID ) ) ) ;
    public final EObject ruleBfValue() throws RecognitionException {
        EObject current = null;

        EObject lv_val_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:929:6: ( ( ( (lv_val_0_0= ruleSignedInt ) ) | ( ( RULE_ID ) ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:930:1: ( ( (lv_val_0_0= ruleSignedInt ) ) | ( ( RULE_ID ) ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:930:1: ( ( (lv_val_0_0= ruleSignedInt ) ) | ( ( RULE_ID ) ) )
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==RULE_INT||(LA16_0>=27 && LA16_0<=28)) ) {
                alt16=1;
            }
            else if ( (LA16_0==RULE_ID) ) {
                alt16=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("930:1: ( ( (lv_val_0_0= ruleSignedInt ) ) | ( ( RULE_ID ) ) )", 16, 0, input);

                throw nvae;
            }
            switch (alt16) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:930:2: ( (lv_val_0_0= ruleSignedInt ) )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:930:2: ( (lv_val_0_0= ruleSignedInt ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:931:1: (lv_val_0_0= ruleSignedInt )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:931:1: (lv_val_0_0= ruleSignedInt )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:932:3: lv_val_0_0= ruleSignedInt
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getBfValueAccess().getValSignedIntParserRuleCall_0_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleSignedInt_in_ruleBfValue1658);
                    lv_val_0_0=ruleSignedInt();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getBfValueRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"val",
                    	        		lv_val_0_0, 
                    	        		"SignedInt", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:955:6: ( ( RULE_ID ) )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:955:6: ( ( RULE_ID ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:956:1: ( RULE_ID )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:956:1: ( RULE_ID )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:957:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getBfValueRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleBfValue1682); 

                    		createLeafNode(grammarAccess.getBfValueAccess().getRefAbstractParamDefCrossReference_1_0(), "ref"); 
                    	

                    }


                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBfValue


    // $ANTLR start entryRuleSignedInt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:977:1: entryRuleSignedInt returns [EObject current=null] : iv_ruleSignedInt= ruleSignedInt EOF ;
    public final EObject entryRuleSignedInt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSignedInt = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:978:2: (iv_ruleSignedInt= ruleSignedInt EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:979:2: iv_ruleSignedInt= ruleSignedInt EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSignedIntRule(), currentNode); 
            pushFollow(FOLLOW_ruleSignedInt_in_entryRuleSignedInt1718);
            iv_ruleSignedInt=ruleSignedInt();
            _fsp--;

             current =iv_ruleSignedInt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSignedInt1728); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSignedInt


    // $ANTLR start ruleSignedInt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:986:1: ruleSignedInt returns [EObject current=null] : ( ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )? ( (lv_value_1_0= RULE_INT ) ) ) ;
    public final EObject ruleSignedInt() throws RecognitionException {
        EObject current = null;

        Token lv_sign_0_1=null;
        Token lv_sign_0_2=null;
        Token lv_value_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:991:6: ( ( ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )? ( (lv_value_1_0= RULE_INT ) ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:992:1: ( ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )? ( (lv_value_1_0= RULE_INT ) ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:992:1: ( ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )? ( (lv_value_1_0= RULE_INT ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:992:2: ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )? ( (lv_value_1_0= RULE_INT ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:992:2: ( ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) ) )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( ((LA18_0>=27 && LA18_0<=28)) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:993:1: ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:993:1: ( (lv_sign_0_1= '+' | lv_sign_0_2= '-' ) )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:994:1: (lv_sign_0_1= '+' | lv_sign_0_2= '-' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:994:1: (lv_sign_0_1= '+' | lv_sign_0_2= '-' )
                    int alt17=2;
                    int LA17_0 = input.LA(1);

                    if ( (LA17_0==27) ) {
                        alt17=1;
                    }
                    else if ( (LA17_0==28) ) {
                        alt17=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("994:1: (lv_sign_0_1= '+' | lv_sign_0_2= '-' )", 17, 0, input);

                        throw nvae;
                    }
                    switch (alt17) {
                        case 1 :
                            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:995:3: lv_sign_0_1= '+'
                            {
                            lv_sign_0_1=(Token)input.LT(1);
                            match(input,27,FOLLOW_27_in_ruleSignedInt1773); 

                                    createLeafNode(grammarAccess.getSignedIntAccess().getSignPlusSignKeyword_0_0_0(), "sign"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getSignedIntRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "sign", lv_sign_0_1, null, lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;
                        case 2 :
                            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1013:8: lv_sign_0_2= '-'
                            {
                            lv_sign_0_2=(Token)input.LT(1);
                            match(input,28,FOLLOW_28_in_ruleSignedInt1802); 

                                    createLeafNode(grammarAccess.getSignedIntAccess().getSignHyphenMinusKeyword_0_0_1(), "sign"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getSignedIntRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "sign", lv_sign_0_2, null, lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1034:3: ( (lv_value_1_0= RULE_INT ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1035:1: (lv_value_1_0= RULE_INT )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1035:1: (lv_value_1_0= RULE_INT )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1036:3: lv_value_1_0= RULE_INT
            {
            lv_value_1_0=(Token)input.LT(1);
            match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleSignedInt1836); 

            			createLeafNode(grammarAccess.getSignedIntAccess().getValueINTTerminalRuleCall_1_0(), "value"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSignedIntRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"value",
            	        		lv_value_1_0, 
            	        		"INT", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSignedInt


    // $ANTLR start entryRuleBlockStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1068:1: entryRuleBlockStmt returns [EObject current=null] : iv_ruleBlockStmt= ruleBlockStmt EOF ;
    public final EObject entryRuleBlockStmt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBlockStmt = null;


        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1069:2: (iv_ruleBlockStmt= ruleBlockStmt EOF )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1070:2: iv_ruleBlockStmt= ruleBlockStmt EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBlockStmtRule(), currentNode); 
            pushFollow(FOLLOW_ruleBlockStmt_in_entryRuleBlockStmt1879);
            iv_ruleBlockStmt=ruleBlockStmt();
            _fsp--;

             current =iv_ruleBlockStmt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBlockStmt1889); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBlockStmt


    // $ANTLR start ruleBlockStmt
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1077:1: ruleBlockStmt returns [EObject current=null] : ( '{' ( (lv_stmts_1_0= ruleAbstractStmt ) )* '}' ) ;
    public final EObject ruleBlockStmt() throws RecognitionException {
        EObject current = null;

        EObject lv_stmts_1_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1082:6: ( ( '{' ( (lv_stmts_1_0= ruleAbstractStmt ) )* '}' ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1083:1: ( '{' ( (lv_stmts_1_0= ruleAbstractStmt ) )* '}' )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1083:1: ( '{' ( (lv_stmts_1_0= ruleAbstractStmt ) )* '}' )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1083:3: '{' ( (lv_stmts_1_0= ruleAbstractStmt ) )* '}'
            {
            match(input,12,FOLLOW_12_in_ruleBlockStmt1924); 

                    createLeafNode(grammarAccess.getBlockStmtAccess().getLeftCurlyBracketKeyword_0(), null); 
                
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1087:1: ( (lv_stmts_1_0= ruleAbstractStmt ) )*
            loop19:
            do {
                int alt19=2;
                int LA19_0 = input.LA(1);

                if ( (LA19_0==RULE_ID||LA19_0==12||LA19_0==21||LA19_0==25||(LA19_0>=27 && LA19_0<=31)) ) {
                    alt19=1;
                }


                switch (alt19) {
            	case 1 :
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1088:1: (lv_stmts_1_0= ruleAbstractStmt )
            	    {
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1088:1: (lv_stmts_1_0= ruleAbstractStmt )
            	    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1089:3: lv_stmts_1_0= ruleAbstractStmt
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getBlockStmtAccess().getStmtsAbstractStmtParserRuleCall_1_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractStmt_in_ruleBlockStmt1945);
            	    lv_stmts_1_0=ruleAbstractStmt();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getBlockStmtRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"stmts",
            	    	        		lv_stmts_1_0, 
            	    	        		"AbstractStmt", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop19;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleBlockStmt1956); 

                    createLeafNode(grammarAccess.getBlockStmtAccess().getRightCurlyBracketKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBlockStmt


    // $ANTLR start ruleSimpleStmtKind
    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1123:1: ruleSimpleStmtKind returns [Enumerator current=null] : ( ( '+' ) | ( '-' ) | ( '<' ) | ( '>' ) | ( ',' ) | ( '.' ) ) ;
    public final Enumerator ruleSimpleStmtKind() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1127:6: ( ( ( '+' ) | ( '-' ) | ( '<' ) | ( '>' ) | ( ',' ) | ( '.' ) ) )
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1128:1: ( ( '+' ) | ( '-' ) | ( '<' ) | ( '>' ) | ( ',' ) | ( '.' ) )
            {
            // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1128:1: ( ( '+' ) | ( '-' ) | ( '<' ) | ( '>' ) | ( ',' ) | ( '.' ) )
            int alt20=6;
            switch ( input.LA(1) ) {
            case 27:
                {
                alt20=1;
                }
                break;
            case 28:
                {
                alt20=2;
                }
                break;
            case 29:
                {
                alt20=3;
                }
                break;
            case 30:
                {
                alt20=4;
                }
                break;
            case 21:
                {
                alt20=5;
                }
                break;
            case 31:
                {
                alt20=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1128:1: ( ( '+' ) | ( '-' ) | ( '<' ) | ( '>' ) | ( ',' ) | ( '.' ) )", 20, 0, input);

                throw nvae;
            }

            switch (alt20) {
                case 1 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1128:2: ( '+' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1128:2: ( '+' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1128:4: '+'
                    {
                    match(input,27,FOLLOW_27_in_ruleSimpleStmtKind2004); 

                            current = grammarAccess.getSimpleStmtKindAccess().getPlusEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getPlusEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1134:6: ( '-' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1134:6: ( '-' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1134:8: '-'
                    {
                    match(input,28,FOLLOW_28_in_ruleSimpleStmtKind2019); 

                            current = grammarAccess.getSimpleStmtKindAccess().getMinusEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getMinusEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1140:6: ( '<' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1140:6: ( '<' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1140:8: '<'
                    {
                    match(input,29,FOLLOW_29_in_ruleSimpleStmtKind2034); 

                            current = grammarAccess.getSimpleStmtKindAccess().getLeftEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getLeftEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;
                case 4 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1146:6: ( '>' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1146:6: ( '>' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1146:8: '>'
                    {
                    match(input,30,FOLLOW_30_in_ruleSimpleStmtKind2049); 

                            current = grammarAccess.getSimpleStmtKindAccess().getRightEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getRightEnumLiteralDeclaration_3(), null); 
                        

                    }


                    }
                    break;
                case 5 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1152:6: ( ',' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1152:6: ( ',' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1152:8: ','
                    {
                    match(input,21,FOLLOW_21_in_ruleSimpleStmtKind2064); 

                            current = grammarAccess.getSimpleStmtKindAccess().getInputEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getInputEnumLiteralDeclaration_4(), null); 
                        

                    }


                    }
                    break;
                case 6 :
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1158:6: ( '.' )
                    {
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1158:6: ( '.' )
                    // ../net.maylander.bfcpublog.bfwb/src-gen/net/maylander/bfcpublog/bfwb/parser/antlr/internal/InternalBrainfuckLanguage.g:1158:8: '.'
                    {
                    match(input,31,FOLLOW_31_in_ruleSimpleStmtKind2079); 

                            current = grammarAccess.getSimpleStmtKindAccess().getOutputEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getSimpleStmtKindAccess().getOutputEnumLiteralDeclaration_5(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSimpleStmtKind


 

    public static final BitSet FOLLOW_ruleBrainfuckProgram_in_entryRuleBrainfuckProgram75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBrainfuckProgram85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleBrainfuckProgram120 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleBrainfuckProgram137 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleBrainfuckProgram152 = new BitSet(new long[]{0x00000000FA20F010L});
    public static final BitSet FOLLOW_13_in_ruleBrainfuckProgram163 = new BitSet(new long[]{0x00000000FA21D010L});
    public static final BitSet FOLLOW_ruleSymbolDef_in_ruleBrainfuckProgram184 = new BitSet(new long[]{0x00000000FA21D010L});
    public static final BitSet FOLLOW_14_in_ruleBrainfuckProgram198 = new BitSet(new long[]{0x00000000FA2C9010L});
    public static final BitSet FOLLOW_ruleAbstractMacroDef_in_ruleBrainfuckProgram219 = new BitSet(new long[]{0x00000000FA2C9010L});
    public static final BitSet FOLLOW_ruleAbstractStmt_in_ruleBrainfuckProgram243 = new BitSet(new long[]{0x00000000FA209010L});
    public static final BitSet FOLLOW_15_in_ruleBrainfuckProgram254 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolDef_in_entryRuleSymbolDef290 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymbolDef300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleSymbolDef335 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSymbolDef352 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleSymbolDef367 = new BitSet(new long[]{0x0000000018000020L});
    public static final BitSet FOLLOW_ruleSignedInt_in_ruleSymbolDef388 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractMacroDef_in_entryRuleAbstractMacroDef424 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractMacroDef434 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMacroDef_in_ruleAbstractMacroDef481 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRegion_in_ruleAbstractMacroDef508 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRegion_in_entryRuleRegion543 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRegion553 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_18_in_ruleRegion588 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRegion605 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleRegion620 = new BitSet(new long[]{0x00000000000C8000L});
    public static final BitSet FOLLOW_ruleAbstractMacroDef_in_ruleRegion641 = new BitSet(new long[]{0x00000000000C8000L});
    public static final BitSet FOLLOW_15_in_ruleRegion652 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMacroDef_in_entryRuleMacroDef688 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMacroDef698 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleMacroDef733 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMacroDef750 = new BitSet(new long[]{0x0000000000101000L});
    public static final BitSet FOLLOW_20_in_ruleMacroDef766 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_ruleParamDef_in_ruleMacroDef787 = new BitSet(new long[]{0x0000000000600000L});
    public static final BitSet FOLLOW_21_in_ruleMacroDef798 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_ruleParamDef_in_ruleMacroDef819 = new BitSet(new long[]{0x0000000000600000L});
    public static final BitSet FOLLOW_22_in_ruleMacroDef831 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleMacroDef843 = new BitSet(new long[]{0x00000000FA209010L});
    public static final BitSet FOLLOW_ruleAbstractStmt_in_ruleMacroDef864 = new BitSet(new long[]{0x00000000FA209010L});
    public static final BitSet FOLLOW_15_in_ruleMacroDef875 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParamDef_in_entryRuleParamDef911 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParamDef921 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleParamDef956 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParamDef973 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractStmt_in_entryRuleAbstractStmt1014 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractStmt1024 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSimpleStmt_in_ruleAbstractStmt1072 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_ruleLoopStmt_in_ruleAbstractStmt1099 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_ruleMacroCall_in_ruleAbstractStmt1126 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_ruleBlockStmt_in_ruleAbstractStmt1153 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_24_in_ruleAbstractStmt1164 = new BitSet(new long[]{0x0000000018000030L});
    public static final BitSet FOLLOW_ruleBfValue_in_ruleAbstractStmt1185 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSimpleStmt_in_entryRuleSimpleStmt1223 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSimpleStmt1233 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSimpleStmtKind_in_ruleSimpleStmt1278 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLoopStmt_in_entryRuleLoopStmt1313 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLoopStmt1323 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleLoopStmt1358 = new BitSet(new long[]{0x00000000FE201010L});
    public static final BitSet FOLLOW_ruleAbstractStmt_in_ruleLoopStmt1388 = new BitSet(new long[]{0x00000000FE201010L});
    public static final BitSet FOLLOW_26_in_ruleLoopStmt1399 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMacroCall_in_entryRuleMacroCall1435 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMacroCall1445 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMacroCall1488 = new BitSet(new long[]{0x0000000000100002L});
    public static final BitSet FOLLOW_20_in_ruleMacroCall1499 = new BitSet(new long[]{0x0000000018000030L});
    public static final BitSet FOLLOW_ruleBfValue_in_ruleMacroCall1520 = new BitSet(new long[]{0x0000000000600000L});
    public static final BitSet FOLLOW_21_in_ruleMacroCall1531 = new BitSet(new long[]{0x0000000018000030L});
    public static final BitSet FOLLOW_ruleBfValue_in_ruleMacroCall1552 = new BitSet(new long[]{0x0000000000600000L});
    public static final BitSet FOLLOW_22_in_ruleMacroCall1564 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBfValue_in_entryRuleBfValue1602 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBfValue1612 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSignedInt_in_ruleBfValue1658 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleBfValue1682 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSignedInt_in_entryRuleSignedInt1718 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSignedInt1728 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleSignedInt1773 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_28_in_ruleSignedInt1802 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleSignedInt1836 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlockStmt_in_entryRuleBlockStmt1879 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBlockStmt1889 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_12_in_ruleBlockStmt1924 = new BitSet(new long[]{0x00000000FA209010L});
    public static final BitSet FOLLOW_ruleAbstractStmt_in_ruleBlockStmt1945 = new BitSet(new long[]{0x00000000FA209010L});
    public static final BitSet FOLLOW_15_in_ruleBlockStmt1956 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleSimpleStmtKind2004 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleSimpleStmtKind2019 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleSimpleStmtKind2034 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_ruleSimpleStmtKind2049 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleSimpleStmtKind2064 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_ruleSimpleStmtKind2079 = new BitSet(new long[]{0x0000000000000002L});

}